﻿def generate_tokens(file_content):
    stack = [0]  # 初始化栈，推入零值
    tokens = []
    lines = file_content.split('\n')
    for line in lines:
        # 计算行缩进层级
        indent_level = len(line) - len(line.lstrip())
        if indent_level > stack[-1]:
            # 新行层级较高，推入栈顶并生成 INDENT 形符
            stack.append(indent_level)
            tokens.append('INDENT')
        elif indent_level < stack[-1]:
            # 新行层级较低，移除栈中高于该层级的数值并生成 DEDENT 形符
            while indent_level < stack[-1]:
                stack.pop()
                tokens.append('DEDENT')
    # 文件末尾处理
    while len(stack) > 1:
        stack.pop()
        tokens.append('DEDENT')
    return tokens

# 示例文件内容
file_content = """
def func():
    if True:
        print('Hello')
    print('World')
"""

tokens = generate_tokens(file_content)
print(tokens)